package com.octopus.core.downloader.proxy;

import com.octopus.core.Request;
import com.octopus.core.matcher.RegexMatcher;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import lombok.NonNull;

/**
 * 提供下载链接正则匹配的代理服务器
 *
 * @author yang_shoulai@hoperun.com
 * @date 2019/08/03
 */
public class URLRegexProxyProvider implements ProxyProvider {

  private Map<RegexMatcher, Proxy> proxies = new HashMap<>();


  public URLRegexProxyProvider() {
  }

  /**
   * 从正表达式匹配构造
   *
   * @param proxies 服务器信息
   */
  public URLRegexProxyProvider(@NonNull Map<RegexMatcher, Proxy> proxies) {
    this.proxies.putAll(proxies);
  }

  /**
   * 新增代理服务信息
   *
   * @param matcher 正则匹配器
   * @param proxy 代理服务器
   */
  public void addProxy(@NonNull RegexMatcher matcher, @NonNull Proxy proxy) {
    this.proxies.put(matcher, proxy);
  }

  @Override
  public Proxy provide(Request request) {
    for (Entry<RegexMatcher, Proxy> entry : this.proxies.entrySet()) {
      RegexMatcher matcher = entry.getKey();
      if (matcher.matches(request.url())) {
        return entry.getValue();
      }
    }
    return null;
  }
}
